package com.zhu.solution.stringQuestion;

/*整数反转
给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ，就返回 0。

假设环境不允许存储 64 位整数（有符号或无符号）。

示例 1：

输入：x = 123
输出：321
示例 2：

输入：x = -123
输出：-321
示例 3：

输入：x = 120
输出：21
示例 4：

输入：x = 0
输出：0

提示：
-2^31 <= x <= 2^31 - 1
*
* */



/**
 * Created with IntelliJ IDEA.
 *
 * @Author: zhujiabao
 * @Date: 2021/12/14/11:25
 * @Description:
 */
public class StringSolution_2 {

    public static void main(String[] args) {
        int x = -12345678;
        int r = new StringSolution_2().reverse(x);
        int r2 = new StringSolution_2().reverse_2(x);
        System.out.println(r);
        System.out.println(r2);
//        System.out.println(Integer.MAX_VALUE);
//        System.out.println(Integer.MIN_VALUE);
//        System.out.println(Integer.valueOf("0000111"));
//        System.out.println("0000111"+'2');
//        System.out.println(-821%-10);
    }

    public int reverse(int x) {
        int index = 1;
        if (x<10 && x>-10){
            return x;
        }else if (x < 0){
            index = -1;
        }
        //最大字符串，最小字符串
        String maxString = Integer.toString(Integer.MAX_VALUE);
        String minString = Integer.toString(Integer.MIN_VALUE);

        //将x反转，并转为字符串
        String xString = "";
        int count = 0 ;
        if (index == 1){
            for (int xTemp = x; xTemp>0; xTemp=xTemp/10){
                xString += Integer.toString(xTemp%10);
                count++;
            }
            if (count < 10 || maxString.compareTo(xString) > 0){
                return Integer.valueOf(xString);
            }else {
                return 0;
            }
        }else {
            xString += "-";
            for (int xTemp = x; xTemp<0; xTemp=xTemp/10){
                xString += Integer.toString((-1)*(xTemp%10));
                count++;
            }
            if (count < 10 || minString.compareTo(xString) > 0){
                return Integer.valueOf(xString);
            }else {
                return 0;
            }
        }

    }

    /*别人的方法*/
    public int reverse_2(int x) {
        int res = 0;
        while (x != 0) {
            int t = x % 10;
            int newRes = res * 10 + t;
            //如果数字溢出，直接返回0
            if ((newRes - t) / 10 != res)
                return 0;
            res = newRes;
            x = x / 10;
        }
        return res;
    }
}
